package threadjuc;

import java.util.concurrent.TimeUnit;

/**
 * @author zxl
 * @version 1.0
 * @date 2021/10/27 17:54
 *  * synchronized 锁的是方法调用者的对象，当一个线程执行这个对象中的方法时，即会加锁，此时，其他线程想要执行这个对象中的方法必须等待上个线程执行完毕
 *  * 如果方法加了static关键字，表明该方法在类加载的时候就有了，所以锁的是class模板，即这个类，此时，无论有多少个对象都只会是同一把锁
 *  * 当类中的方法出现了静态和非静态的方法，此时加锁会分为class锁和对象锁
 *  * 最主要看锁的是不是同一个东西
 */
public class Juc7 {
    public static void main(String[] args) throws InterruptedException {
        Test test = new Test();
        new Thread(()->{
            test.A();
        }).start();

        //让线程停止
        TimeUnit.SECONDS.sleep(1);

        new Thread(()->{
            test.B();
        }).start();
    }
}

class Test{
    public static synchronized void A(){
        try {
            //让线程停止
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("A");
    }

    public synchronized void B(){
        System.out.println("B");
    }
}